import { computed, ref, type Ref } from "vue";
import type { ITodo } from "../utils/todoStorage";

export default function useEidtTodo(todosRef: Ref<ITodo[]>) {
  const editingTodo = ref<ITodo | null>(null);
  let originTitle: string = "";

  const editTodo = (todo: ITodo) => {
    originTitle = todo.title;
    editingTodo.value = todo;
  };

  const doneTodo = (todo: ITodo) => {
    editingTodo.value = null;
    const title = todo.title.trim();
    if (title) {
      todo.title = title;
    } else {
      todosRef.value.splice(todosRef.value.indexOf(todo), 1);
    }
  };

  const cancelEidt = (todo: ITodo) => {
    editingTodo.value = null;
    todo.title = originTitle;
  };

  const allDoneRef = computed({
    get() {
      return todosRef.value.filter((v) => !v.completed).length === 0;
    },
    set(checked) {
      todosRef.value.forEach((todo) => {
        todo.completed = checked;
      });
    },
  });

  return {
    editingTodo,
    editTodo,
    doneTodo,
    cancelEidt,
    allDoneRef,
  };
}
